package tk.paulista.dc.control;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.roo.addon.web.mvc.controller.finder.RooWebFinder;
import org.springframework.roo.addon.web.mvc.controller.scaffold.RooWebScaffold;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import tk.paulista.dc.model.ItemDaRefeicao;

@RequestMapping("/itemdarefeicaos")
@Controller
@RooWebScaffold(path = "itemdarefeicaos", formBackingObject = ItemDaRefeicao.class)
@RooWebFinder
public class ItemDaRefeicaoController extends ApplicationAbstractController {

	@RequestMapping(method = RequestMethod.POST, produces = "text/html")
	public String create(@Valid ItemDaRefeicao itemDaRefeicao,
			BindingResult bindingResult, Model uiModel,
			HttpServletRequest httpServletRequest) {
		if (bindingResult.hasErrors()) {
			populateEditForm(uiModel, itemDaRefeicao);
			return "itemdarefeicaos/create";
		}
		uiModel.asMap().clear();
		setUsuario(itemDaRefeicao);
		itemDaRefeicao.persist();
		setDate(itemDaRefeicao);
		itemDaRefeicao.persist();
		setQuantidadeDeCalorias(itemDaRefeicao);
		itemDaRefeicao.persist();
		setQuantidadeDeCaloriasDoDia(itemDaRefeicao);
		itemDaRefeicao.persist();
		return "redirect:/itemdarefeicaos/"
				+ encodeUrlPathSegment(itemDaRefeicao.getId().toString(),
						httpServletRequest);
	}

	private void setDate(ItemDaRefeicao itemDaRefeicao) {
		if (itemDaRefeicao.getDiaDoDiario() == null) {
			itemDaRefeicao.setDiaDoDiario(getDateWithoutTime());
		}
	}

	private void setUsuario(ItemDaRefeicao itemDaRefeicao) {
		itemDaRefeicao.setUsuarioDoItemDaRefeicao(getUsuarioLogado());
	}

	private void setQuantidadeDeCaloriasDoDia(ItemDaRefeicao itemDaRefeicao) {
		try {
			itemDaRefeicao
					.setQuantidadeDeCaloriasDoDia(ItemDaRefeicao
							.getCaloriasDoDiaDoItemDaRefeicaos(
									itemDaRefeicao.getDiaDoDiario(),
									getUsuarioLogado()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void setQuantidadeDeCalorias(ItemDaRefeicao itemDaRefeicao) {
		itemDaRefeicao.setQuantidadeDeCalorias(itemDaRefeicao
				.getPorcaoDeAlimento().getQuantidadeDeCaloriasPorUnidade()
				* itemDaRefeicao.getQuantidade());
	}

	@RequestMapping(method = RequestMethod.PUT, produces = "text/html")
	public String update(@Valid ItemDaRefeicao itemDaRefeicao,
			BindingResult bindingResult, Model uiModel,
			HttpServletRequest httpServletRequest) {
		if (bindingResult.hasErrors()) {
			populateEditForm(uiModel, itemDaRefeicao);
			return "itemdarefeicaos/update";
		}
		uiModel.asMap().clear();
		setQuantidadeDeCalorias(itemDaRefeicao);
		itemDaRefeicao.merge();
		setQuantidadeDeCaloriasDoDia(itemDaRefeicao);
		itemDaRefeicao.merge();
		return "redirect:/itemdarefeicaos/"
				+ encodeUrlPathSegment(itemDaRefeicao.getId().toString(),
						httpServletRequest);
	}
}
